unsigned long shadow_l2_table(
- struct domain *d, unsigned long gpfn)
+ struct domain *d, unsigned long gmfn)
{
struct pfn_info *spfn_info;
unsigned long spfn;
- unsigned long guest_gpfn;
+ unsigned long gpfn;
- guest_gpfn = __mfn_to_gpfn(d, gpfn);
+ gpfn = __mfn_to_gpfn(d, gmfn);
- SH_VVLOG("shadow_l2_table( %p )", gpfn);
+ SH_VVLOG("shadow_l2_table( %p )", gmfn);
perfc_incrc(shadow_l2_table_count);
spfn = spfn_info - frame_table;
/* Mark pfn as being shadowed; update field to point at shadow. */
- set_shadow_status(d, guest_gpfn, spfn | PSH_shadowed);
+ set_shadow_status(d, gpfn, spfn | PSH_shadowed);
#ifdef __i386__
/* Install hypervisor and 2x linear p.t. mapings. */
if ( shadow_mode_translate(d) )
{
#ifdef CONFIG_VMX
- vmx_update_shadow_state(d->exec_domain[0], gpfn, spfn);
+ vmx_update_shadow_state(d->exec_domain[0], gmfn, spfn);
#else
panic("Shadow Full 32 not yet implemented without VMX\n");
#endif
&idle_pg_table[DOMAIN_ENTRIES_PER_L2_PAGETABLE],
HYPERVISOR_ENTRIES_PER_L2_PAGETABLE * sizeof(l2_pgentry_t));
spl2e[LINEAR_PT_VIRT_START >> L2_PAGETABLE_SHIFT] =
- mk_l2_pgentry((gpfn << PAGE_SHIFT) | __PAGE_HYPERVISOR);
+ mk_l2_pgentry((gmfn << PAGE_SHIFT) | __PAGE_HYPERVISOR);
spl2e[SH_LINEAR_PT_VIRT_START >> L2_PAGETABLE_SHIFT] =
mk_l2_pgentry((spfn << PAGE_SHIFT) | __PAGE_HYPERVISOR);
spl2e[PERDOMAIN_VIRT_START >> L2_PAGETABLE_SHIFT] =
mk_l2_pgentry(__pa(page_get_owner(
- &frame_table[gpfn])->arch.mm_perdomain_pt) |
+ &frame_table[gmfn])->arch.mm_perdomain_pt) |
__PAGE_HYPERVISOR);
unmap_domain_mem(spl2e);
}
#endif
- SH_VLOG("shadow_l2_table( %p -> %p)", gpfn, spfn);
+ SH_VLOG("shadow_l2_table( %p -> %p)", gmfn, spfn);
return spfn;
}
}
extern unsigned long shadow_l2_table(
- struct domain *d, unsigned long gpfn);
+ struct domain *d, unsigned long gmfn);
static inline void shadow_invalidate(struct exec_domain *ed) {
if ( !shadow_mode_translate(ed->domain))
#ifdef CONFIG_VMX
static inline void vmx_update_shadow_state(
- struct exec_domain *ed, unsigned long gpfn, unsigned long smfn)
+ struct exec_domain *ed, unsigned long gmfn, unsigned long smfn)
{
l2_pgentry_t *mpl2e = 0;
__flush_tlb_one(SH_LINEAR_PT_VIRT_START);
spl2e = (l2_pgentry_t *)map_domain_mem(smfn << PAGE_SHIFT);
- gpl2e = (l2_pgentry_t *)map_domain_mem(gpfn << PAGE_SHIFT);
+ gpl2e = (l2_pgentry_t *)map_domain_mem(gmfn << PAGE_SHIFT);
memset(spl2e, 0, L2_PAGETABLE_ENTRIES * sizeof(l2_pgentry_t));
ed->arch.shadow_vtable = spl2e;
static inline void __update_pagetables(struct exec_domain *ed)
{
struct domain *d = ed->domain;
- unsigned long gpfn = pagetable_val(ed->arch.guest_table) >> PAGE_SHIFT;
- unsigned long smfn = __shadow_status(d, gpfn) & PSH_pfn_mask;
+ unsigned long gmfn = pagetable_val(ed->arch.guest_table) >> PAGE_SHIFT;
- SH_VVLOG("0: __update_pagetables(gpfn=%p, smfn=%p)", gpfn, smfn);
+ // mafetter: BUG: __shadow_status() should take a gpfn, not a gmfn...
+ // WHY DOES THIS WORK?
+ unsigned long smfn = __shadow_status(d, gmfn) & PSH_pfn_mask;
+
+ SH_VVLOG("0: __update_pagetables(gmfn=%p, smfn=%p)", gmfn, smfn);
if ( unlikely(smfn == 0) )
- smfn = shadow_l2_table(d, gpfn);
+ smfn = shadow_l2_table(d, gmfn);
#ifdef CONFIG_VMX
else if ( shadow_mode_translate(ed->domain) )
- vmx_update_shadow_state(ed, gpfn, smfn);
+ vmx_update_shadow_state(ed, gmfn, smfn);
#endif
ed->arch.shadow_table = mk_pagetable(smfn<<PAGE_SHIFT);